package com.cskaoyan.javase.homework.day06.advance;

import java.util.Arrays;

/**
 * 本题目实际上就是对String数组元素的删除、修改以及查找
 * @since 14:51
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class StringArrCRUDDemo {
    public static void main(String[] args) {
        String[] names = {"张三", "李四", "麻子"};
        System.out.println("初始的数组是:" + Arrays.toString(names));
        if (deleteName(names, "张三")) {
            System.out.println("删除成功!");
            System.out.println("原数组变成了:" + Arrays.toString(names));
        }
    }

    /**
     * 在给定数组中，删除目标人名，规定:
     *    删除成功,返回true
     *    删除失败,返回false
     *
     * @param target 目标数组
     * @param nameTarget 被删除的目标人名
     * @return boolean
     * @author wuguidong@cskaoyan.onaliyun.com
     */
    public static boolean deleteName(String[] target, String nameTarget) {
        // 遍历查找目标元素,找到了就赋值为null
        for (int i = 0; i < target.length; i++) {
            // 判断目标人名和数组中人名是否重复,重复就说明存在,删除掉(赋值为null)
            if (nameTarget.equals(target[i])) {
                // 找到了
                target[i] = null;
                return true;
            }
        }
        // 代码运行到这里,说明没找到目标元素,删除失败
        return false;
    }

    /**
     * 找到目标人名，修改成功,返回true
     * 没找到目标人名，修改失败,返回false
     *
     * @param names 被修改人名的目标数组
     * @param target 被修改的目标人名
     * @param newValue 修改后的取值
     * @return boolean
     * @author wuguidong@cskaoyan.onaliyun.com
     */
    public static boolean updateName(String[] names, String target, String newValue) {
        for (int i = 0; i < names.length; i++) {
            if (target.equals(names[i])) {
                // 找到了,修改为新的取值,更新成功
                names[i] = newValue;
                return true;
            }
        }
        // 修改失败,没找到元素
        return false;
    }

    /**
     * 查找目标人名,找到了就返回目标人名在数组中的下标
     * 没找到就返回-1
     *
     * @param names
     * @param target
     * @return int
     * @author wuguidong@cskaoyan.onaliyun.com
     */
    public static int retrieveName(String[] names, String target) {
    /*
        首先需要定义一个目标下标作为返回的结果下标
        给出一个初始值-1
        因为数组下标肯定不可能是-1,表示没找到目标人名
     */
        int targetIndex = -1;
        for (int i = 0; i < names.length; i++) {
            if (target.equals(names[i])) {
                // 找到了
                targetIndex = i;
            }
        }
        // 没找到,直接就返回-1
        return targetIndex;
    }
}
